/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package automenta.netention.swing; import automenta.netention.Detail; import automenta.netention.Pattern; import automenta.netention.Self; import java.awt.Graphics2D; import java.awt.Image; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ColorConvertOp; import java.io.File; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import sun.awt.image.ToolkitImage; /** * * @author seh */ public class Icons { // public static enum PatternIcon { // THING("/thing"); // EVENT("/thing"); // EVENT("/thing"); // // public String iconURL; // // PatternIcon(String iconURL) { // this.iconURL = iconURL; // } // // } static Map<String, String> objectToIconPath = new HashMap(); static Map<String, ImageIcon> icons = new HashMap(); static { objectToIconPath.put("default", "media/tango32/actions/document-new.png"); objectToIconPath.put("pattern", "media/tango32/categories/applications-system.png"); objectToIconPath.put("property", "media/tango32/status/dialog-information.png"); objectToIconPath.put("add", "media/tango32/actions/list-add.png"); objectToIconPath.put("addPattern", "media/tango32/actions/list-add.png"); objectToIconPath.put("network", "media/tango32/status/network-transmit-receive.png"); objectToIconPath.put("thought", "media/tango32/categories/applications-system.png"); objectToIconPath.put("what", "media/tango32/places/folder.png"); objectToIconPath.put("who", "media/tango32/apps/system-users.png"); objectToIconPath.put("where", "media/tango32/categories/applications-internet.png"); objectToIconPath.put("when", "media/tango32/actions/appointment-new.png"); objectToIconPath.put("recent", "media/tango32/places/user-home.png"); objectToIconPath.put("frequent", "media/tango32/status/dialog-warning.png"); objectToIconPath.put("home", "media/tango32/actions/go-home.png"); objectToIconPath.put("map", "media/tango32/categories/applications-internet.png"); objectToIconPath.put("person", "media/tango32/emotes/face-smile.png"); } public static ImageIcon getFileIcon(String path) { return getFileIcon(path, -1, -1); } public static ImageIcon getFileIcon(String origPath, int sw, int sh) { String path = origPath; if (icons.containsKey(origPath)) { return icons.get(origPath); } ImageIcon i = null; if (path.startsWith("http://")) { try { i = new ImageIcon(ImageIO.read(new URL(path))); Logger.getLogger(Icons.class.getName()).log(Level.INFO, "Loaded image " + path); } catch (Exception ex) { Logger.getLogger(Icons.class.getName()).log(Level.SEVERE, null, ex); } } else { if (path.startsWith("media://")) { path = path.replace("media://", "media/"); } try { Image im = ImageIO.read(new File("./" + path)); if (sw != -1) { im = im.getScaledInstance(sw, sh, Image.SCALE_DEFAULT); } i = new ImageIcon(im); } catch (Exception ex) { Logger.getLogger(Icons.class.getName()).log(Level.SEVERE, null, ex); } } // if (i != null) { // i.setImage(i.getImage().getScaledInstance(24, 24, Image.SCALE_SMOOTH)); // icons.put(origPath, i); // } return i; } public static ImageIcon getIcon(String type) { String path = objectToIconPath.get(type); if (path != null) { return getFileIcon(path); } return getFileIcon(objectToIconPath.get("default")); } public static BufferedImage convertToGrayscale(BufferedImage source) { BufferedImageOp op = new ColorConvertOp( ColorSpace.getInstance(ColorSpace.CS_GRAY), null); return op.filter(source, null); } public static BufferedImage getBufferedImage(ToolkitImage image) { // Create a buffered image in which to draw BufferedImage bufferedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); // Draw image into bufferedImage. Graphics2D g2 = bufferedImage.createGraphics(); g2.drawImage(image, 0, 0, null); g2.dispose(); return bufferedImage; } public static ImageIcon getIconGrayscale(String t) { ImageIcon ii = getIcon(t); ii.setImage(convertToGrayscale(getBufferedImage((ToolkitImage)ii.getImage()))); return ii; } public static ImageIcon getDetailIcon(Self s, Detail d) { String p = d.getIconURL(); if (p == null) { for (String pat : d.getPatterns()) { ImageIcon i = getPatternIcon(s.getPattern(pat)); if (i != null) { return i; } } return getIcon("thought"); } else { return getFileIcon(p); } } public static ImageIcon getPatternIcon(Pattern p) { if (p == null) { return null; } String u = p.getIconURL(); if (u != null) { return getFileIcon(p.getIconURL()); } else { return null; } } public static ImageIcon getObjectIcon(Self self, Object o) { if (o instanceof Detail) { Detail d = (Detail) o; return Icons.getDetailIcon(self, d); } else if (o instanceof Pattern) { Pattern p = (Pattern) o; return Icons.getPatternIcon(p); } return Icons.getIcon("thought"); } }